#include <iostream>
#include <vector>
#include <functional>

// 自定义模板类
template <typename T, typename Compare = std::less<T>>
class CustomSorter {
private:
    std::vector<T> data;
    Compare comp; // 比较器
/*
// 自定义快速排序实现
    void quickSort(int left, int right) {
        if (left >= right) return;  // 递归终止条件

        // 获取分区点
        int pivotIndex = partition(left, right);

        // 递归排序左右两部分
        quickSort(left, pivotIndex - 1);
        quickSort(pivotIndex + 1, right);
    }

    // 分区函数，返回分区点
    int partition(int left, int right) {
        T pivot = data[right]; // 选择最右边的元素作为枢轴
        int i = left - 1;

        for (int j = left; j < right; ++j) {
            // 如果当前元素小于或等于枢轴（根据比较器）
            if (comp(data[j], pivot)) {
                ++i;
                std::swap(data[i], data[j]);
            }
        }

        // 将枢轴放到正确的位置
        std::swap(data[i + 1], data[right]);
        return i + 1;
    }
*/
public:
    void add(const T& value) {
        data.push_back(value);
    }

    void sort() {
        std::sort(data.begin(), data.end(), comp);
    }

    void print() {
        for (const auto& val : data) {
            std::cout << val << " ";
        }
        std::cout << std::endl;
    }
};

int main() {
    // 默认使用 std::less（升序）
    CustomSorter<int> sorter1;
    sorter1.add(5);
    sorter1.add(2);
    sorter1.add(8);
    sorter1.add(1);
    sorter1.sort();
    sorter1.print(); // 输出：1 2 5 8

    // 使用 std::greater（降序）
    CustomSorter<int, std::greater<int>> sorter2;
    sorter2.add(5);
    sorter2.add(2);
    sorter2.add(8);
    sorter2.add(1);
    sorter2.sort();
    sorter2.print(); // 输出：8 5 2 1

    return 0;
}

